Название плагина: DKR_OnMaxTpState

Автор: DarchanKaen

Версия: 1.0

Дата выхода:
Версия 1.0 - 25.12.2021

Описание плагина:
Плагин позволяет накладывать, только в бою(!), на героя в партии Статус при достижении значения TP.

Нюансы:
В данной версии нельзя менять статус, что изначально настроен у героя.
У одного героя может быть только один настроенный статус (или ни одного).
В логе боя наложение статуса текстом не отображается.
Плагин действует только в бою.

Использование плагина(одинаково и для MV , и для MZ):
В Примечании героя нужно написать:
<onMaxTpLimit:X>
<onMaxTpStateId:Y>
<onMaxTpStateRemoveTp:Z>
где:
'X' - значение Tp героя, при котором будет наложен статус (от 1 до 100);
'Y' - Id (номер) накладываемого Состояния...см. в редакторе MV в "Состояния".
'Z' - значение Tp, которое будет отнято у героя после наложения Состояния (от 0 до 100).

Параметры плагина
Включено ли наложение статусов со старта игры.

Команды (в эвенте, в команде "Скрипт")
DKR.OnMaxTpState.OnOffMaxTpState(true / false); - включает / выключает работу плагина (true = вкл, false = выкл.);


Код:
Спойлер Версия 1.0, для MV и MZ:

Код:
/*:
 *-----------------------------------------------------------------------------
 *  DKR OnMaxTpState
 *-----------------------------------------------------------------------------
 *  For: RPGMAKER MV, MZ
 *  DKR_OnMaxTpState.js
 *-----------------------------------------------------------------------------
 *  25.12.2021 - Версия 1.0.0
 *-----------------------------------------------------------------------------
 * Поставляется AS-IS.
 * Вся ответственность при использовании - на Пользователе!
 *-----------------------------------------------------------------------------
 *-----------------------------------------------------------------------------
 * @author DarchanKaen
 * @target MV, MZ
 * @plugindesc (v.1.0.0) Плагин позволяет накладывать на героя в партии Статус при достижении значения Tp.
 * @help
 *   DKR OnMaxTpState MV, MZ 1.0
 * ----------------------------------------------------------------------------
 * ---Общая информация:
 * Плагин позволяет  накладывать на героя в партии Состояние при достижении значения Tp,
 * а также отнимать Tp героя после получения Статуса. Это все можно настроить.
 * Состояние может быть как положительный и отрицательный, в.т.ч. "Смерть".
 * ---Использование:
 * --Параметры плагина
 * В параметрах можно указать, включена ли работа плагина по-умолчаню.
 * --В Примечании героя:
 *	<onMaxTpLimit:X>
 *	<onMaxTpStateId:Y>
 *	<onMaxTpStateRemoveTp:Z>
 * где:
 *  'X' - значение Tp героя, при котором будет наложен статус (от 1 до 100);
 *  'Y' - Id (номер) накладываемого Состояния...см. в редакторе MV в "Состояния".
 *  'Z' - значение Tp, которое будет отнято у героя после наложения Состояния (от 0 до 100).
 * --Команды (для раздела "Скрипт"):
 *	DKR.OnMaxTpState.OnOffMaxTpState(true / false); - включает / выключает работу плагина (true = вкл, false = выкл.);
 * ----------------------------------------------------------------------------
 * 
 * @param maxTpStateOn
 * @type boolean
 * @desc Включен ли плагин со старта игры
 * @default true
 */

 
var Imported = Imported || {};
Imported.DKR_OnMaxTpState = true;

var DKR = DKR || {};          
DKR.OnMaxTpState = DKR.OnMaxTpState || {}; 
DKR.OnMaxTpState.version = 1.0;

DKR.OnMaxTpState.parameters = PluginManager.parameters('DKR_OnMaxTpState_MVMZ');


( () => {
	
	
	//---DATA
	DKR.OnMaxTpState.maxTpStateOn = (DKR.OnMaxTpState.parameters['maxTpStateOn']=== 'true') ? true : false;
	
	
	//---RPGMV SYMBIOSIS
	DKR.OnMaxTpState.refresh = Game_Battler.prototype.refresh;
	Game_Battler.prototype.refresh = function() {
		DKR.OnMaxTpState.refresh.call(this);
		
		if(true === DKR.OnMaxTpState.maxTpStateOn){
			if( true === this.isActor() ){
				if ( this._tp >= getOnMaxTpLimit(this) ){
					applyOnMaxTpState(this);
				}
			}
		}

	}
	
	
	//---LOGIC
	let applyOnMaxTpState = function(gameActor){
		let isError = false;
		
		let maxTpStateIdAndRemoveValue = getMaxTpStateIdAndRemoveValue(gameActor);
		let maxTpStateId = maxTpStateIdAndRemoveValue[0];
		let maxTpRemoveValue = maxTpStateIdAndRemoveValue[1];
		
		
		if(maxTpStateId < 1){
			isError = true;
			console.log('DKR.OnMaxTpState: error! State Id can`t be below 1!');
		}
		if(maxTpRemoveValue < 0 || maxTpRemoveValue > 100){
			isError = true;
			console.log('DKR.OnMaxTpState: error! Remove Tp is ' + maxTpRemoveValue + ', it  can`t be below 0 or more than 100!');
		}
		
		if(false === isError){
			gameActor.addState(maxTpStateId);
			gameActor._tp -= maxTpRemoveValue;
		}else{
			return false;
		}
		
	}
	
	
	let getOnMaxTpLimit = function (gameActor){
		maxTpLimit = -1;
		
		let actorMetadata = getActorMetadata(gameActor);
		
		maxTpLimit = Number(actorMetadata.onMaxTpLimit);
		
			//console.log('maxTpLimit:', maxTpLimit);
		
		if(maxTpLimit < 1 && maxTpLimit > 100){
			console.log('DKR.OnMaxTpState: error! Max Tp is ' + maxTpLimit + ', it can`t be below 1 and more than 100!');
		}
		
		return maxTpLimit;
	}
	
	
	let getMaxTpStateIdAndRemoveValue = function(gameActor){
		let maxTpStateId = -1;
		let tpRemoveValue = 0;
		
		let actorMetadata = getActorMetadata(gameActor);
		
		if(null === actorMetadata){
			return [maxTpStateId, tpRemoveValue];
		}
		
		maxTpStateId = Number(actorMetadata.onMaxTpStateId);
		tpRemoveValue  = Number(actorMetadata.onMaxTpStateRemoveTp); 
		
			//console.log('maxTpStateId, tpRemoveValue:', maxTpStateId, tpRemoveValue);

		return [maxTpStateId, tpRemoveValue];
	}
	

	let getActorMetadata = function(gameActor){
		let actorMetadata = null;
		
		let actorId = gameActor.actorId();
		let actor = $dataActors[actorId];
		
			//console.log('actorId:', actorId);
		
		actorMetadata = actor.meta;
		
		return actorMetadata;
	}
	
	
	
	//---COMMAND
	DKR.OnMaxTpState.OnOffMaxTpState = function(isOn){
		DKR.OnMaxTpState.maxTpStateOn = isOn;
	}
	
	
	
})();


Загрузка:
Спойлер Версия 1.0 для MV и MZ:


Условия поставки плагина:
Поставляется AS-IS.
Вся ответственность при использовании - на Пользователе!
!

Совместимость:
Совместимость с другими плагинами не гарантируется.

Спойлер Лирическое отступление:
Делал для одной своей игры, так вышло, что использовал в совсем другой.
Что-то подобное есть у Янфли...но я не разобрался, как корректно настроить его вариант. =)
И еще меня удивило, что подобных плагинов почти нет (ну или я криво гуглю).

Кроме этого, подобную технику можно использовать для ХП и МП, чуть изменив код плагина в части проверки условия:
" if ( this._tp >= getOnMaxTpLimit(this) ){ "

Быть может, вам это пригодится чтоб разнообразить бои.